package br.com.financas.repository;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.financas.abstractions.IUsuarioRepository;
import br.com.financas.entity.Usuario;

public class UsuarioRepository implements IUsuarioRepository<Usuario> {
	private EntityManager manager;
	private List<Usuario> usuarios;
	
	public UsuarioRepository(EntityManager manager){
		this.manager = manager;
		usuarios = new ArrayList<Usuario>();
	}

	@Override
	public void inserir(Usuario usuario) throws Exception {
		try{
			manager.getTransaction().begin();
			manager.persist(usuario);
			manager.getTransaction().commit();
		}catch(Exception e){
			manager.getTransaction().rollback();
			throw e;
		}
		
	}

	@Override
	public boolean deletar(Usuario usuario) {
		return false;
	}

	@Override
	public void atualizar(Usuario usuario) {
		// TODO Auto-generated method stub
	}

	@Override
	public List<Usuario> obterTodos() {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> logar(String usuario, String senha) {
		Query query;
		
		try {
			query = manager.createQuery("SELECT u FROM Usuario u WHERE u.username = :usuario");
			query.setParameter("usuario", usuario);
			usuarios =  query.getResultList();
		} catch (Exception e) {
			manager.getTransaction().rollback();
		}
			
				
		return usuarios;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> obterPorLogin(String login) {
		Query query;
		List<Usuario> usuarios = null;
		
		try {
			query = manager.createQuery("SELECT u FROM Usuario u WHERE u.username = :login");
			query.setParameter("login", login);
			usuarios =  query.getResultList();
		} catch (Exception e) {
			manager.getTransaction().rollback();
		}
		return usuarios;
	}

}
